[Add] Improved xml #define magic stuff.

This commit is contained in:
Allanis 2013-05-08 18:49:24 +01:00
parent 3a8a9028d3
commit c609780acc
7 changed files with 144 additions and 108 deletions

View File

@ -33,15 +33,15 @@ function create()
-- Target destination.
local i = 0
repeat
planet = space.getPlanet( misn.factions() )
planet = space.getPlanet(misn.factions())
i = i + 1
until planet ~= space.landName() or i > 10
-- Infinite loop protection.
if i > 10 then
misn.finish(false)
end
system = space.getSystem( planet )
misn_dist = space.jumpDist( system )
system = space.getSystem(planet)
misn_dist = space.jumpDist(system)
-- Mission generics.
i = rnd.int(6)
@ -66,7 +66,7 @@ function create()
misn_setTitle(string.format(title[i+21], carg_type, planet))
end
-- More mission specifics
-- More mission specifics.
if misn_type == "Cargo" or misn_type == "Rush" then
carg_mass = rnd.int(10, 30)
i = rnd.int(12) -- Set the goods.
@ -84,16 +84,16 @@ function create()
end
if misn_type == "Cargo" then
misn.setDesc( string.format( misn_desc[1], planet, system, carg_mass, carg_type ) )
misn.setDesc(string.format( misn_desc[1], planet, system, carg_mass, carg_type))
reward = misn_dist * carg_mass * (250+rnd.int(150)) +
carg_mass * (150+rnd.int(75)) +
rnd.int(1500)
elseif misn_type == "Rush" then
misn_time = time.get() + time.units(2) +
rnd.int(time.units(2), time.units(4)) * misn_dist
misn.setDesc( string.format( misn_desc[11], planet, system,
misn.setDesc(string.format( misn_desc[11], planet, system,
carg_mass, carg_type,
time.str(misn_time), time.str(misn_time-time.get()) ) )
time.str(misn_time), time.str(misn_time-time.get())))
reward = misn_dist * carg_mass * (450+rnd.int(250)) +
carg_mass * (250+rnd.int(125)) +
rnd.int(2500)
@ -101,49 +101,49 @@ function create()
misn.setDesc(string.format(misn_desc[21], carg_type, planet, system))
reward = misn_dist * (1000 + rnd.int(500)) + rnd.int(2000)
end
misn.setReward( string.format( misn_reward, reward ) )
misn.setReward(string.format(misn_reward, reward))
end
-- Mission is accepted
-- Mission is accepted.
function accept()
if player.freeCargo() < carg_mass then
tk.msg( full_title, string.format( full_msg, carg_mass-player.freeCargo() ))
tk.msg(full_title, string.format(full_msg, carg_mass-player.freeCargo()))
elseif misn.accept() then -- Able to accept the mission, hooks BREAK after accepting
carg_id = player.addCargo( carg_type, carg_mass )
tk.msg( accept_title, string.format( accept_msg, carg_mass, carg_type ))
elseif misn.accept() then -- Able to accept the mission, hooks BREAK after accepting.
carg_id = player.addCargo(carg_type, carg_mass)
tk.msg(accept_title, string.format( accept_msg, carg_mass, carg_type))
-- Set the hooks
hook.land( "land" ) -- Only hook after accepting
if misn_type == "Rush" then -- Rush needs additional time hook
hook.time( "timeup" )
-- Set the hooks.
hook.land("land") -- Only hook after accepting.
if misn_type == "Rush" then -- Rush needs additional time hook.
hook.time("timeup")
end
else
tk.msg( toomany_title, toomany_msg )
tk.msg(toomany_title, toomany_msg)
end
end
-- Land hook
-- Land hook.
function land()
if space.landName() == planet then
if player.rmCargo( carg_id ) then
if player.rmCargo(carg_id) then
player.pay( reward )
tk.msg( finish_title, string.format( finish_msg, carg_type ))
tk.msg(finish_title, string.format( finish_msg, carg_type))
misn.finish(true)
else
tk.msg( miss_title, string.format( miss_msg, carg_mass, carg_type ))
tk.msg(miss_title, string.format( miss_msg, carg_mass, carg_type))
end
end
end
-- Time hook
-- Time hook.
function timeup()
if time.get() > misn_time then
player.msg( misn_time_msg )
player.msg(misn_time_msg)
misn.finish(false)
end
misn.setDesc( string.format( misn_desc[2], planet, system,
misn.setDesc(string.format( misn_desc[2], planet, system,
carg_mass, carg_type,
time.str(misn_time), time.str(misn_time-time.get()) ) )
time.str(misn_time), time.str(misn_time-time.get())))
end

View File

@ -1,7 +1,7 @@
lang = lephisto.lang()
if lang == "es" then
-- Not translated atm
else -- Default english
-- Not translated atm.
else -- Default english.
misn_title = "Empire Recruitment"
misn_reward = "%d credits"
misn_desc = "Deliver some parcels for the Empire to %s."
@ -20,23 +20,23 @@ You aren't too sure of what to make of your encounter with the Empire, only time
end
function create()
-- Intro text
tk.msg( title[1], text[1] )
if tk.yesno( title[1], text[2] )
-- Intro text.
tk.msg(title[1], text[1])
if tk.yesno(title[1], text[2])
then
misn.accept()
dest = space.getPlanet("Empire");
-- Mission details
-- Mission details.
reward = 3000
misn.setTitle(misn_title)
misn.setReward( string.format(misn_reward, reward) )
misn.setDesc( string.format(misn_desc,dest))
misn.setReward(string.format(misn_reward, reward))
misn.setDesc(string.format(misn_desc,dest))
-- Flavour text and mini-briefing
tk.msg( title[2], string.format( text[3], dest ))
-- Flavour text and mini-briefing.
tk.msg(title[2], string.format( text[3], dest))
-- Set up the goal
-- Set up the goal.
parcels = player.addCargo("Parcels", 0)
hook.land("land")
end
@ -46,8 +46,8 @@ function land()
if space.landName() == dest then
if player.rmCargo(parcels) then
player.pay(reward)
-- More flavour text
tk.msg(title[3], string.format( text[4], dest ))
-- More flavour text.
tk.msg(title[3], string.format(text[4], dest))
var.push("es_cargo", true)
misn.finish(true)
end

View File

@ -1,7 +1,7 @@
lang = lephisto.lang()
if lang == "es" then
-- Not translated atm
else -- Default english
-- Not translated atm.
else -- Default english.
misn_title = "Collective Scout"
misn_reward = ""
misn_desc = {}
@ -23,8 +23,8 @@ else -- Default english
end
function create()
-- Intro text
if tk.yesno( title[1], string.format(text[1], player.name()) )
-- Intro text.
if tk.yesno(title[1], string.format(text[1], player.name()))
then
misn.accept()
@ -34,13 +34,13 @@ function create()
misn_base = "Omega Station"
misn_base_sys = "NCG-7291"
-- Mission details
-- Mission details.
misn.setTitle(misn_title)
misn.setReward( misn_reward )
misn.setDesc( string.format(misn_desc[1],misn_nearby))
misn.setReward(misn_reward)
misn.setDesc(string.format(misn_desc[1],misn_nearby))
-- Flavour text and mini-briefing
tk.msg( title[2], string.format( text[2], misn_nearby, misn_base, misn_base_sys ))
-- Flavour text and mini-briefing.
tk.msg(title[2], string.format(text[2], misn_nearby, misn_base, misn_base_sys))
hook.enter("enter")
hook.land("land")
@ -50,20 +50,20 @@ end
function enter()
sys = space.system()
-- Additional fleets
if sys == "NCG-7291" then -- Increase action for realism
-- Additional fleets.
if sys == "NCG-7291" then -- Increase action for realism.
pilot.add("Empire Sml Defense")
pilot.add("Collective Sml Swarm")
elseif sys == misn_target then
p = pilot.add("Collective Drone")
for k,v in pairs(p) do
hook.pilotDeath( v, "kill")
hook.pilotDeath(v, "kill")
end
end
-- update mission
-- update mission.
if misn_stage == 0 and sys == misn_target then
misn.setDesc( string.format(misn_desc[2],misn_base,misn_base_sys) )
misn.setDesc(string.format(misn_desc[2],misn_base,misn_base_sys))
misn_stage = 1
end
end
@ -72,13 +72,13 @@ function land()
planet = space.landName()
if misn_stage == 1 and planet == misn_base then
tk.msg( title[3], string.format(text[3],misn_target) )
tk.msg(title[3], string.format(text[3],misn_target))
misn.finish(true)
end
end
function kill()
player.msg( msg_killdrone )
player.msg(msg_killdrone)
misn.finish(false)
end

View File

@ -1,7 +1,7 @@
lang = lephisto.lang()
if lang == "es" then
-- Not translated atm
else -- Default english
-- Not translated atm.
else -- Default english.
misn_desc = "The Empire needs to ship %d tons of %s to %s in the %s system by %s (%s left)."
misn_reward = "%d credits"
title = {}
@ -20,31 +20,31 @@ else -- Default english
miss_timeup = "MISSION FAILED: You have failed to deliver the goods to the Empire on time!"
end
-- Empire shipping missions are always timed, but quite lax on the schedules
-- pays a bit more then the rush missions
-- Empire shipping missions are always timed, but quite lax on the schedules.
-- Pays a bit more then the rush missions.
-- Create the mission
-- Create the mission.
function create()
-- Target destination
-- Target destination.
local i = 0
repeat
planet = space.getPlanet( misn.factions() )
planet = space.getPlanet(misn.factions())
i = i + 1
until planet ~= space.landName() or i > 10
-- Infinite loop protection
-- Infinite loop protection.
if i > 10 then
misn.finish(false)
end
system = space.getSystem( planet )
misn_dist = space.jumpDist(system)
-- Mission generics
-- Mission generics.
misn_type = "Cargo"
i = rnd.int(1)
misn.setTitle( string.format(title[i+1], planet) )
misn.setTitle(string.format(title[i+1], planet))
-- More mission specifics
carg_mass = rnd.int( 10, 30 )
-- More mission specifics.
carg_mass = rnd.int(10, 30)
i = rnd.int(12)
if i < 5 then
carg_type = "Food"
@ -60,36 +60,36 @@ function create()
misn_time = time.get() + time.units(5) +
rnd.int(time.units(5), time.units(8)) * misn_dist
misn.setDesc( string.format( misn_desc, carg_mass, carg_type, planet, system,
time.str(misn_time), time.str(misn_time-time.get())) )
misn.setDesc(string.format( misn_desc, carg_mass, carg_type, planet, system,
time.str(misn_time), time.str(misn_time-time.get())))
reward = misn_dist * carg_mass * (500+rnd.int(250)) +
carg_mass * (250+rnd.int(150)) +
rnd.int(2500)
misn.setReward( string.format( misn_reward, reward ) )
misn.setReward(string.format( misn_reward, reward))
end
-- Mission is accepted
-- Mission is accepted.
function accept()
if player.freeCargo() < carg_mass then
tk.msg( full_title, string.format( full_msg, carg_mass-player.freeCargo() ))
elseif misn.accept() then -- Able to accept the mission, hooks BREAK after accepting
carg_id = player.addCargo( carg_type, carg_mass )
tk.msg( accept_title, string.format( accept_msg, carg_mass, carg_type ))
hook.land( "land" ) -- Only hook after accepting
hook.time( "timeup" )
tk.msg(full_title, string.format(full_msg, carg_mass-player.freeCargo()))
elseif misn.accept() then -- Able to accept the mission, hooks BREAK after accepting.
carg_id = player.addCargo(carg_type, carg_mass)
tk.msg(accept_title, string.format( accept_msg, carg_mass, carg_type))
hook.land("land") -- Only hook after accepting.
hook.time("timeup")
else
tk.msg( toomany_title, toomany_msg )
tk.msg(toomany_title, toomany_msg)
end
end
-- Land hook
-- Land hook.
function land()
if space.landName() == planet then
if player.rmCargo( carg_id ) then
player.pay( reward )
tk.msg( finish_title, string.format( finish_msg, carg_type ))
if player.rmCargo(carg_id) then
player.pay(reward)
tk.msg(finish_title, string.format(finish_msg, carg_type))
-- Increase empire shipping mission counter
-- Increase empire shipping mission counter.
n = var.peek("es_misn")
if n ~= nil then
var.push("es_misn", n+1)
@ -99,18 +99,18 @@ function land()
misn.finish(true)
else
tk.msg( miss_title, string.format( miss_msg, carg_mass, carg_type ))
tk.msg(miss_title, string.format( miss_msg, carg_mass, carg_type))
end
end
end
-- Time hook
-- Time hook.
function timeup()
if time.get() > misn_time then
player.msg( miss_timeup )
player.msg(miss_timeup)
misn.finish(false)
end
misn.setDesc( string.format( misn_desc, carg_mass, carg_type, planet, system,
time.str(misn_time), time.str(misn_time-time.get())) )
misn.setDesc(string.format( misn_desc, carg_mass, carg_type, planet, system,
time.str(misn_time), time.str(misn_time-time.get())))
end

View File

@ -29,7 +29,7 @@ int pilots = 0;
static int mpilots = 0;
extern Pilot* player;
extern unsigned int combat_crating;
extern unsigned int player_crating;
// Stack of fleets.
static Fleet* fleet_stack = NULL;
@ -261,7 +261,7 @@ void pilot_hit(Pilot* p, const Solid* w, const unsigned int shooter,
if(!pilot_isFlag(p, PILOT_DEAD)) {
pilot_dead(p);
// Adjust the combat rating based on pilot mass.
if(shooter == PLAYER_ID) combat_crating += MAX(1, p->ship->mass/50);
if(shooter == PLAYER_ID) player_crating += MAX(1, p->ship->mass/50);
}
}

View File

@ -44,7 +44,7 @@ static char** player_lstack = NULL; // Names of the planet the ships are at.
static int player_nstack = 0;
// Player global properties.
char* player_name = NULL; // Player name.
int combat_crating = 0; // Ze rating.
int player_crating = 0; // Ze rating.
unsigned int player_flags = 0; // Player flags.
// Input.c
double player_turn = 0.; // Turn velocity from input.
@ -197,8 +197,8 @@ static void player_newMake(void) {
// MONIEZZ!!!! -- We call these SCred AKA SaraCred. Lame right?
tmp = cur->children;
do {
if(xml_isNode(tmp, "low")) l = xml_getInt(tmp);
else if(xml_isNode(tmp, "high")) h = xml_getInt(tmp);
xmlr_int(tmp, "low", l);
xmlr_int(tmp, "high", h);
} while(xml_nextNode(tmp));
}
else if(xml_isNode(cur, "system")) {
@ -207,18 +207,16 @@ static void player_newMake(void) {
// System name. TODO: Chance based on percentage.
if(xml_isNode(tmp, "name")) snprintf(system, 20, xml_get(tmp));
// Position.
else if(xml_isNode(tmp, "x")) x = xml_getFloat(tmp);
else if(xml_isNode(tmp, "y")) y = xml_getFloat(tmp);
xmlr_float(tmp, "x", x);
xmlr_float(tmp, "y", y);
} while(xml_nextNode(tmp));
}
else if(xml_isNode(cur, "combat_crating"))
combat_crating = xml_getInt(cur);
else if(xml_isNode(cur, "date")) {
xmlr_int(cur, "player_crating", player_crating);
if(xml_isNode(cur, "date")) {
tmp = cur->children;
do {
if(xml_isNode(tmp, "low")) tl = xml_getInt(tmp);
else if(xml_isNode(tmp, "high")) th = xml_getInt(tmp);
xmlr_int(tmp, "low", tl);
xmlr_int(tmp, "high", th);
} while(xml_nextNode(tmp));
}
} while((cur = cur->next));
@ -387,13 +385,13 @@ static char* player_ratings[] = {
};
const char* player_rating(void) {
if(combat_crating == 0) return player_ratings[0];
else if(combat_crating < 50) return player_ratings[1];
else if(combat_crating < 200) return player_ratings[2];
else if(combat_crating < 500) return player_ratings[3];
else if(combat_crating < 1000) return player_ratings[4];
else if(combat_crating < 2500) return player_ratings[5];
else if(combat_crating < 10000) return player_ratings[6];
if(player_crating == 0) return player_ratings[0];
else if(player_crating < 50) return player_ratings[1];
else if(player_crating < 200) return player_ratings[2];
else if(player_crating < 500) return player_ratings[3];
else if(player_crating < 1000) return player_ratings[4];
else if(player_crating < 2500) return player_ratings[5];
else if(player_crating < 10000) return player_ratings[6];
else return player_ratings[7];
}

View File

@ -1,6 +1,9 @@
#pragma once
#include "libxml/parser.h"
#include "libxml/xmlwriter.h"
#include "log.h"
#define XML_NODE_START 1
#define XML_NODE_TEXT 3
@ -20,3 +23,38 @@
#define xml_getInt(n) (atoi((char*)(n)->children->content))
#define xml_getFloat(n) (atof((char*)(n)->children->content))
// Reader crap.
#define xmlr_int(n,s,i) \
if(xml_isNode(n,s)) { i = xml_getInt(n); continue; }
#define xmlr_float(n,s,f) \
if(xml_isNode(n,s)) { f = xml_getFloat(n); continue; }
// Writer crap.
// Encompassing element.
#define xmlw_startElem(w, str) \
if(xmlTextWriterStartElement(w, str) < 0) { \
ERR("xmlw: Unable to create start element"); return -1; }
#define xmlw_endElem(w) \
if(xmlTextWriterEndElement(w) < 0) { \
ERR("xmlw: Unable to create end element"); return -1; }
// Other stuff.
#define xmlw_elem(w, n, str, args...) \
if(xmlTextWriteFormatElement(w, n, str, ## args) < 0) { \
ERR("xmlw: Unable to write format element"); return -1; }
#define xmlw_attr(w, str, val) \
if(xmlTextWriteAttribute(w, str, val) < 0) { \
ERR("xmlw: Unable to write element attribute"); return -1; }
// Document level.
#define xmlw_start(w) \
if(xmlTextWriterStartDocument(writer, NULL, "UTF-8", NULL) < 0) { \
ERR("xmlw: Unable to start document"); return -1; }
#define xmlw_done(w) \
if(xmlTextWriterEndDocument(w) < 0) { \
ERR("xmlw: Unable to end document"); return -1; }